Practical Object-Oriented Design, An Agile Primer Using Ruby